package com.lyrcsoft.springmvc;

import com.lyrcsoft.springmvc.servlet.DispatcherServlet;
import org.apache.catalina.Context;
import org.apache.catalina.Wrapper;
import org.apache.catalina.startup.Tomcat;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.annotation.ComponentScan;

/**
 * @author fujc-dev@qq.com
 * @version 1.0
 */
@ComponentScan("com.lyrcsoft")
public class Start {

    public static void main(String[] args) throws Exception {
        Tomcat tomcat = new Tomcat();
        tomcat.setPort(8080);
        Context appContext = tomcat.addWebapp("/", "D:\\MyWork\\Learning-Spring-Mvc\\MySpringMvc\\src\\main\\webapp");
        // 打开IOC扫描
        AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(Start.class);
        // 内嵌版本的Tomcat固定写法
        Wrapper wrapper = Tomcat.addServlet(appContext, "dispatcherServlet", new DispatcherServlet(ac));
        wrapper.setLoadOnStartup(1);
        wrapper.addMapping("/");
        //  <load-on-startup>1</load-on-startup>  如果配置是是正整数：预加载（tomcat启动的时候会将DispatcherServlet加载进去）
        // 如果没有设置load-on-startup：默认懒加载，路径匹配到了就加载
        // 404：分析：就算是懒加载为什么还是404？我已经配置了斜杠“/”啊，在tomcat的server.xml中，"/"被DefaultServlet拦截到了，
        appContext.addServletMappingDecoded("/", "dispatcherServlet");
        tomcat.start();
        tomcat.getServer().await();
        //有一个不好的地方，Spring与Tomcat耦合得比较紧密
    }
}
